home *** CD-ROM | disk | FTP | other *** search
/ Light ROM 1 / LIGHT-ROM 1 (Amiga Library Services)(1994).iso / ffdisks / d935.lha / AmiCDROM / generic.h < prev    next >
C/C++ Source or Header  |  1993-12-20  |  4KB  |  119 lines

  1. /* generic.h: */
  2.  
  3. #ifndef _GENERIC_H_
  4. #define _GENERIC_H_
  5.  
  6. typedef unsigned long t_ulong;
  7. typedef unsigned short t_ushort;
  8. typedef unsigned char t_uchar;
  9. typedef int t_bool;
  10.  
  11. typedef enum protocol {
  12.   PRO_UNKNOWN,
  13.   PRO_ISO,
  14.   PRO_HIGH_SIERRA,
  15.   PRO_ROCK,
  16.   PRO_HFS
  17. } t_protocol;
  18.  
  19. typedef struct VOLUME {
  20.   CDROM         *cd;            /* Pointer to CDROM structure    */
  21.   t_protocol     protocol;        /* Protocol used        */
  22.   struct handler *handler;        /* Pointer to handler struct    */
  23.   void         *vol_info;        /* Depends on protocol        */
  24.   size_t     vol_info_size;        /* Size of vol_info structure    */
  25.   /* for use by the device handler: */
  26.   t_bool     valid;            /* Is the volume valid?        */
  27.   int         locks;            /* Number of locks on this vol. */
  28. } VOLUME;
  29.  
  30. typedef struct CDROM_OBJ {
  31.   t_bool        directory_f;    /* TRUE iff object is a directory     */
  32.   VOLUME        *volume;    /* Pointer to volume node          */
  33.   unsigned long        pos;        /* Current position (for read & seek) */
  34.   void            *obj_info;    /* Depends on protocol              */
  35. } CDROM_OBJ;
  36.  
  37. typedef struct CDROM_INFO {
  38.   t_bool        directory_f;    /* TRUE if object is a directory*/
  39.   int            name_length;    /* length of file name        */
  40.   char            name[256];    /* file name            */
  41.   unsigned long        date;        /* creation date        */
  42.   unsigned long        file_length;    /* length of file        */
  43.   void            *suppl_info;    /* supplementary information    */
  44. } CDROM_INFO;
  45.  
  46. /* Codes: M=mandatory,
  47.  *        O=optional (may be NULL)
  48.  */
  49.  
  50. typedef struct handler {
  51.   /*M*/ void      (*close_vol_info)(VOLUME *);
  52.   /*M*/ CDROM_OBJ *(*open_top_level_directory)(VOLUME *);
  53.   /*M*/ CDROM_OBJ *(*open_obj_in_directory)(CDROM_OBJ *, char *);
  54.   /*M*/ CDROM_OBJ *(*find_parent)(CDROM_OBJ *);
  55.   /*M*/ void      (*close_obj)(CDROM_OBJ *);
  56.   /*M*/ int      (*read_from_file)(CDROM_OBJ *, char *, int);
  57.   /*M*/ t_bool      (*cdrom_info)(CDROM_OBJ *, CDROM_INFO *);
  58.   /*M*/ t_bool      (*examine_next)(CDROM_OBJ *, CDROM_INFO *, unsigned long *);
  59.   /*M*/ void      *(*clone_obj_info)(void *);
  60.   /*M*/ t_bool      (*is_top_level_obj)(CDROM_OBJ *);
  61.   /*M*/ t_bool      (*same_objects)(CDROM_OBJ *, CDROM_OBJ *);
  62.   /*O*/    t_ulong      (*creation_date)(VOLUME *);
  63.   /*M*/ t_ulong   (*volume_size)(VOLUME *);
  64.   /*M*/ void      (*volume_id)(VOLUME *, char *, int);
  65.   /*M*/ t_ulong      (*location)(CDROM_OBJ *);
  66.   /*M*/ t_ulong      (*file_length)(CDROM_OBJ *);
  67.   /*M*/ t_ulong   (*block_size)(VOLUME *);
  68. } t_handler;
  69.  
  70. #define ISOERR_NO_MEMORY        1       /* out of memory                */
  71. #define ISOERR_SCSI_ERROR       2       /* scsi command return with err */
  72. #define ISOERR_NO_PVD           3       /* prim volume descr not found  */
  73. #define ISOERR_ILLEGAL_NAME     4       /* illegal path name            */
  74. #define ISOERR_NO_SUCH_RECORD   5       /* no such record in path table */
  75. #define ISOERR_NOT_FOUND        6       /* file not found               */
  76. #define ISOERR_OFF_BOUNDS       7       /* bad seek operation           */
  77. #define ISOERR_BAD_ARGUMENTS    8       /* bad arguments                */
  78. #define ISOERR_INTERNAL         9       /* reason unknown               */
  79.  
  80. #define SEEK_FROM_START         -1      /* values for                   */
  81. #define SEEK_FROM_CURRENT_POS   0       /* the 'Seek_Position'          */
  82. #define SEEK_FROM_END           1       /* function                     */
  83.  
  84. extern int iso_errno;
  85.  
  86. t_protocol Which_Protocol (CDROM *p_cdrom, t_bool p_use_rock_ridge, int *p_skip);
  87.  
  88. VOLUME *Open_Volume (CDROM *p_cdrom, t_bool p_use_rock_ridge);
  89. void Close_Volume (VOLUME *p_volume);
  90.  
  91. CDROM_OBJ *Open_Top_Level_Directory (VOLUME *p_volume);
  92. CDROM_OBJ *Open_Object (CDROM_OBJ *p_current_dir, char *p_path_name);
  93. void Close_Object (CDROM_OBJ *p_object);
  94.  
  95. int Read_From_File (CDROM_OBJ *p_file, char *p_buffer, int p_buffer_length);
  96.  
  97. int CDROM_Info (CDROM_OBJ *p_obj, CDROM_INFO *p_info);
  98. t_bool Examine_Next (CDROM_OBJ *p_dir, CDROM_INFO *p_info, unsigned long *p_offset);
  99.  
  100. CDROM_OBJ *Clone_Object (CDROM_OBJ *p_object);
  101. CDROM_OBJ *Find_Parent (CDROM_OBJ *p_object);
  102.  
  103. t_bool Is_Top_Level_Object (CDROM_OBJ *p_object);
  104.  
  105. int Seek_Position (CDROM_OBJ *p_object, long p_offset, int p_mode);
  106.  
  107. t_bool Same_Objects (CDROM_OBJ *p_object1, CDROM_OBJ *p_object2);
  108. t_ulong Volume_Creation_Date (VOLUME *p_volume);
  109. t_ulong Volume_Size (VOLUME *p_volume);
  110. t_ulong Block_Size (VOLUME *p_volume);
  111. void Volume_ID (VOLUME *p_volume, char *p_buffer, int p_buf_length);
  112. t_ulong Location (CDROM_OBJ *p_object);
  113.  
  114.  
  115. int Strncasecmp (char *p_str1, char *p_str2, int p_length);
  116.  
  117.  
  118. #endif /* _GENERIC_H_ */
  119.